import pandas as pd

# 计算每个月的最高温度、最低温度、出现的风向列表、出现的空气质量列表

def agg_demo():

    filepath = "../datas/beijing_tianqi/beijing_tianqi_2018.csv"
    df = pd.read_csv(filepath)
    # 知识：使用df.info()可以查看每列的类型
    # print(df.info())
    # 知识：series怎样从str类型变成int
    df['bWendu'] = df['bWendu'].str.replace("℃","").astype("int32")
    df['yWendu'] = df['yWendu'].str.replace("℃","").astype("int32")
    # 知识：进行日期列解析，可以方便提取月份
    df['ymd'] = pd.to_datetime(df['ymd'])
    # print(df['ymd'].dt.month)
    df['month'] = df['ymd'].dt.month
    # 知识：series可以用Series.unique去重
    # print(df['month'].unique())
    # [ 1  2  3  4  5  6  7  8  9 10 11 12]
    # 知识：可以用",".join(series)实现数组合并成大字符串
    print(",".join(df["fengxiang"].unique()))
    # 方法1
    # result = (
    #     df.groupby(df['ymd']).agg(
    #         # 新列名 = (原列名，函数)
    #         最高温度=('bWendu','max'),
    #         最低温度=('yWendu','min'),
    #         风向列表=('fengxiang',lambda x :','.join(x.unique())),
    #         天气状况=('aqiInfo',lambda x :','.join(x.unique()))
    #     ).reset_index()
    #         .rename(columns={"ymd":"月份"})
    # )
    # print(result)
    # print(df)
    # 方法2
    result = df.groupby(df['ymd']).apply(agg_func).reset_index().rename(columns={"ymd":"月份"})
    print(result)

def agg_func(x):
    return pd.Series({
        "最高温度": x["bWendu"].max(),
        "最低温度": x["yWendu"].min(),
        "风向列表": ",".join(x["fengxiang"].unique()),
        "空气质量列表": ",".join(x["aqiInfo"].unique())
    })











if __name__ == '__main__':
    agg_demo()
